package com.chapter17.demo9;


/**
 * 如果在run方法中调用了sleep，则线程将进入睡眠；如果调用了wait方法，则线程将挂起。
 * 这两种情况，线程都将进入阻塞状态，这时通过标记字段来控制任务退出就无法实现了，如果要让线程在阻塞的状态下
 * 中止，那么可以调用Thread类的interrupt方法。该方法在上述两种阻塞情况下，会引发InterruptedException，
 */
public class TerminateAtBlocked {
    public static void main(String[] args) {
        Thread t = new Thread(new BlockedTask());
        t.start();
        //Thread类的静态方法interrupted和实例方法isInterrupted来检测线程是否被中断，前者是检测当前线程是否被中断，且会清除线程的中断状态，
        // 也就是说，如果连续两次调用interrupted方法，那么第二次调用将返回false；后者是检测此线程（调用isInterrupted方法的线程对象）是否已被中断，
        // 线程的中断状态不会受该方法的调用影响。


        //要注意的是，如果线程因调用sleep或者wait方法进入阻塞状态，被该线程对象的interrupt方法所中断而引发InterruptedException，
        // 那么线程的中断状态将会被清除。也就是说，在这种情况下无论你是调用interrupted还是isInterrupted方法，返回的都是false。
        t.interrupt();
    }
}
